package cn.yotta.user.core.server.iface.token;

import cn.yotta.user.core.server.dto.token.TokenDto;
import lombok.AllArgsConstructor;
import lombok.Data;

import java.io.Serializable;
import java.util.Map;

/**
 * @author wyaoyao
 * @date 2023/3/11 9:37
 * Token 生成策略
 */
public interface TokenGenerateStrategy {

    TokenDto generate(TokenGenParam genParam, Integer expireSecond);

    TokenParseResult decode(String token);
    @Data
    class TokenGenParam {


        private final Long userId;


        /**
         * 用户名
         */
        private final String username;


        public TokenGenParam(Long id, String username) {
            this.userId = id;
            this.username = username;

        }

        /**
         * 其他参数
         */
        private Map<String, String> extra;

    }

    /**
     * @author wyaoyao
     * @date 2022/11/8 11:06
     * 用户的静态信息，这些信息一旦注册几乎不会发生变化
     */
    @Data
    @AllArgsConstructor
    class TokenParseResult implements Serializable {

        /**
         * 原始的token信息
         */
        private final String token;

        private final Long userId;

        /**
         * 用户名
         */
        private final String username;

    }
}
